package org.yelongframework.excel.data.fill.sheet.manager;

import java.util.List;

import org.yelongframework.excel.data.fill.sheet.SheetDataFillException;
import org.yelongframework.excel.data.fill.sheet.SheetDataFillMode;
import org.yelongframework.excel.data.fill.sheet.SheetDataFillScheme;
import org.yelongframework.excel.data.fill.sheet.SheetDataFiller;
import org.yelongframework.excel.sheet.ExcelSheet;
import org.yelongframework.lang.Nullable;

/**
 * 工作表数据填充器管理器
 * 
 * @since 1.0.0
 */
public interface SheetDataFillerManager {

	// ==================================================注册==================================================

	/**
	 * 注册数据填充器
	 * 
	 * @param sheetDataFiller 数据填充器
	 */
	void registerSheetDataFiller(SheetDataFiller sheetDataFiller);

	/**
	 * 注册数据填充器
	 * 
	 * @param sheetDataFillers 数据填充器集合
	 */
	void registerSheetDataFillers(List<SheetDataFiller> sheetDataFillers);

	// ==================================================获取==================================================

	/**
	 * 根据数据填充模式获取数据填充器
	 * 
	 * @param sheetDataFillMode 数据填充模式
	 * @return 数据填充器
	 */
	@Nullable
	SheetDataFiller getSheetDataFiller(SheetDataFillMode sheetDataFillMode);

	// ==================================================数据填充==================================================

	/**
	 * 使用合适的填充器进行数据填充
	 * 
	 * @param excelSheet          工作表
	 * @param sheetDataFillScheme 数据填充方案
	 * @throws SheetDataFillException 工作表数据填充异常
	 */
	void dataFill(ExcelSheet excelSheet, SheetDataFillScheme sheetDataFillScheme) throws SheetDataFillException;

}
